package com.ssy.lingxi.order.service.feign;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.model.bo.LogisticsProductBO;
import com.ssy.lingxi.order.model.bo.LogisticsProductDetailBO;
import com.ssy.lingxi.order.model.dto.OrderConsigneeDTO;
import com.ssy.lingxi.order.model.dto.OrderSeparateDTO;
import com.ssy.lingxi.order.model.dto.ProductAddressDTO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderProductFreeFreightVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 物流服务Feign接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-09-14
 */
public interface ILogisticsFeignService {
    /**
     * 查询配送方式为“自提”的商品地址
     * @param addressIds 地址Id列表
     * @return 查询结果
     */
    Wrapper<List<ProductAddressDTO>> findProductAddresses(List<Long> addressIds);

    /**
     * （转单）生成供应商收货人信息，计算转单订单的运费
     * @param logisticsProducts 订单、供应商、上游供应商商品信息
     * @return 查询结果
     */
    Wrapper<List<OrderConsigneeDTO>> findVendorConsignee(List<LogisticsProductBO> logisticsProducts);

    /**
     * （拆单）查询商品的运费
     * @param consigneeId 收货人地址Id
     * @param products 拆单后的商品列表
     * @return 查询结果
     */
    Wrapper<Map<OrderSeparateDTO, BigDecimal>> findSeparateOrderFreight(Long consigneeId, Map<OrderSeparateDTO, List<LogisticsProductDetailBO>> products);

    /**
     * 查询订单运费
     * @param consigneeId 收货人地址Id
     * @param logisticsProducts 订单商品信息列表
     * @return 订单运费
     */
    Wrapper<BigDecimal> findOrderFreight(Long consigneeId, List<LogisticsProductDetailBO> logisticsProducts);

    /**
     * 查询满额包邮的商品总运费
     * @param freightVO 接口参数
     * @return 订单运费
     */
    Wrapper<BigDecimal> findOrderFreeFreight(OrderProductFreeFreightVO freightVO);
}
